Wiskunde 1 - Data Analysis - casus Blackjack

Opdracht

Voor deze opdracht ontwikkel je zelf een strategie om blackjack (21-en) te spelen. Daarbij gebruik je wat je bij Data Analysis hebt geleerd over kansrekenen en je implementeert je strategie in Python.

Uitvoering

Voer de opdracht, naar keuze, zelfstandig of in tweetallen uit. We willen adviseren om in tweetallen te werken: twee weten meer, zien meer en werken met meer enthousiasme.
Lever je uitwerking van de opdracht in bij de docent, uiterlijk op vrijdag 22 januari. Stuur je Python-programma (een .ipynb bestand, een .py bestand of een platte-tekstbestand met daarin de code) per e-mail naar Bas.vanderWulp@fontys.nl.

Uitleg bij de opdracht

In het programma 'Blackjack - YOUR NAME HERE' ga je je eigen blackjack logica invullen. Dit doe je in de functie genaamd 'callback'. Een uitgebreide uitleg van deze functie vind je in het voorbeeld 'Blackjack - single player example'.
Je kunt de gegevens die worden aangeleverd in het data-argument van de callback gebruiken om je strategie slimmer te maken. Je zou bijvoorbeeld kunnen tellen welke kaarten er nog in het deck zitten of onthouden tot welk resultaat (winst/verlies) een beslissing in een eerdere ronde leidde.
Je bent helemaal vrij om hier zelf (geldige) Python-code in te vullen. Het is niet toegestaan verwijzingen naar andere bestanden op te nemen in je programma. Wel mag je, mocht je daar behoefte aan hebben, alle libraries (programmabibliotheken) die worden meegeleverd met Python of Anaconda gebruiken in je programma, zoals random, numpy, scipy en scikit-learn.

Alle ingeleverde uitwerkingen zullen in week 9 tijdens de bijeenkomst van DA op dinsdagochtend tegen elkaar strijden. Bij deze wedstrijd gelden de volgende regels:

  • deelnemers strijden per wedstrijdronde in groepen van (maximaal) vier aan een 'tafel'
  • het aantal spelronden (hand) per spel (wedstrijd) wordt ter plekke bepaald door de jury, denk hierbij aan 10, 100, 1000, of 100000 speelronden
  • iedere deelnemer begint een wedstrijdronde met 0 punten
  • in iedere spelronde (hand) wordt een punt toegekend aan iedere deelnemer die wint (win), een punt afgenomen van iedere deelnemer die verliest (loss) en deelnemers die gelijkspelen (draw) krijgen en verliezen geen punten
  • iedere wedstrijdronde wint één deelnemer per tafel, namelijk de deelnemer met het hoogste aantal punten
  • wanneer meerdere deelnemers aan een tafel hetzelfde, hoogste puntenaantal hebben, wordt een extra wedstrijdronde gespeeld tussen deze deelnemers, tot een enkele winnaar aan te wijzen is
  • deelnemers waarbij het programma een fout veroorzaakt tijdens een spelronde verliezen twee punten en nemen niet verder deel aan de spelronde
  • deelnemers waarbij het programma langdurig blijft 'hangen' worden gediskwalificeerd voor verdere deelname

In de zipfile die je hebt gedownload vind je acht bestanden. Pak alle bestanden uit in een folder genaamd blackjack op een plek die je vanuit Jupyter (IPython Notebook) kunt bereiken.

  • blackjack.py:
    Implementatie van het blackjackspel. Maak geen wijzigingen in dit bestand, want je gaat het niet inleveren! Er staat een uitleg van de spelregels in, die hieronder is ook is opgenomen. Het is niet nodig dit bestand te lezen, tenzij je geinteresseerd bent.
  • Blackjack - single player example.ipynb:
    Dit is een voorbeeld van een uitwerking. Het spel wordt gespeeld door één speler die willekeurig voor 'hit' of 'stand' kiest.
  • Blackjack - single player experiment (no comments).ipynb:
    Zelfde voorbeeld als het bestand hierboven, maar nu is de code wellicht wat leesbaarder omdat de uitleg over de callback is weggelaten.
  • Blackjack - single player example - always 'stand'.ipynb:
    Dit is een voorbeeld van een uitwerking. Het spel wordt gespeeld door één speler die altijd 'stand' kiest. Dat dat niet zo'n handige strategie is, kun je wel zien aan de resultaten wanneer je het programma runt.
  • Blackjack - multiplayer example.ipynb:
    Dit is een voorbeeld van een uitwerking. Het spel wordt gespeeld door meerdere spelers, waarbij iedere speler willekeurig voor 'hit' of 'stand' kiest.
    Er wordt een tweede, monddode versie van de callback functie gebruikt zodat alleen de output van de eerste speler wordt getoond.
  • Blackjack - multiplayer example (no comments).ipynb:
    Zelfde voorbeeld als het bestand hierboven, maar nu is de code wellicht wat leesbaarder omdat alle uitleg is weggelaten.
  • Wiskunde 1 - Data Analysis - Case 'Blackjack'.ipynb:
    Dit bestand.
  • Blackjack - YOUR NAME HERE.ipynb: In deze versie schrijf implementeer je je eigen blackjack logica. Stuur dit bestand (of de inhoud er van) naar de docent.

Spelregels

De spelregels zoals ze gehanteerd worden in het programma. Merk op dat ze helaas in het Engels geschreven zijn, want dat kwam toevallig zo uit tijdens het programmeren.

  • cards are dealt from a single, shuffled deck of 52 standard 'playing cards'
  • when the deck runs out, a fresh deck is shuffled and used (note: this entails a player can receive the same card twice, e.g. aces of spades, in a single round, but it still allows for some level of card counting)
  • card values:
    • number cards have face value (2=2, 3=3, etc.)
    • face cards all count for 10
    • aces count for either 1 or 11, whichever is more favorable for the player
    • colors (hearts, diamonds, spades and clubs) are irrelevant while calculating hand value
  • the game is played for a preset number of rounds
  • each player will play for an individual win, loss or draw during each round of the game and:
    • gain 1 point for each round won
    • lose 1 point for each round lost
    • neither gain nor win a point for each round resulting in a draw
  • each round runs as follows:
    • each player is dealt start hand of two cards, visible to everyone
    • the dealer is handed a start hand of two cards of which only the first is visible
    • in turns, each player plays the game:
      • the aim for the player is to reach a total hand value of 21, which results in an immediate win of the round
      • when a players hand value exceeds 21 (bust), the player immediately loses the round
      • while the players hand value is below 21, the player can choose to 'hit' or 'stand':
        • when a player chooses to 'hit', another card is added to their hand
        • when a player chooses to 'stand', they receive no more cards
    • when all players have played their turns, if any player has chosen to 'stand', the dealer will play their hand:
      • the dealer will start by revealing their second card
      • if the dealers hand value is below 21, the dealer will repeatedly add cards to their hand until their hand value exceeds 16
      • if the dealers hand exceeded 21 (bust), all 'standing' players win
      • if the dealer did not bust his hand:
        • a player wins if their hand value exceeds the dealers
        • a player draws if their hand value equals the dealers
        • a player loses if their hand value is below the dealers

In [ ]: